Praktikum Visi Komputer

Modul ke-11

Stereo Vision and 3D Reconstruction

(Penglihatan stereo dan rekontruksi 3D)

Korespondensi stereo

Saat kita mengambil gambar, kita memproyeksikan dunia 3D di sekitar kita pada bidang gambar 2D. Jadi secara teknis, kita hanya memiliki informasi 2D ketika kita mengambil foto-foto itu. Karena semua objek dalam pemandangan itu diproyeksikan ke bidang 2D datar, informasi kedalaman (depth) hilang. Kita tidak memiliki cara untuk mengetahui seberapa jauh suatu objek dari kamera atau bagaimana objek diposisikan terhadap satu sama lain dalam ruang 3D. Di sinilah stereo vision muncul.

Manusia sangat pandai dalam menyimpulkan informasi mendalam dari dunia nyata. Alasannya adalah karena kita memiliki dua mata yang diposisikan beberapa inci dari satu sama lain. Setiap mata bertindak sebagai sebuah kamera dan kita menangkap dua gambar dari pemandangan yang sama dari dua sudut pandang yang berbeda, yaitu, satu gambar masing-masing menggunakan mata kiri dan kanan. Jadi, otak kita mengambil dua gambar ini dan membuat peta 3D menggunakan penglihatan stereo. Inilah yang ingin kita capai dengan menggunakan algoritma stereo vision. Kita dapat mengambil dua foto dari pemandangan yang sama menggunakan sudut pandang yang berbeda, lalu mencocokkan titik yang sesuai untuk mendapatkan peta kedalaman pemandangan.

image.png

Mari kita perhatikan gambar berikut:

image-9.png

Sekarang, jika kita menangkap pemandangan yang sama dari sudut yang berbeda, akan terlihat seperti ini:

image-2.png

Seperti yang kita lihat, ada sejumlah besar gerakan di posisi objek dalam gambar. Jika Anda mempertimbangkan koordinat piksel, nilai posisi awal dan posisi akhir akan sangat berbeda dalam dua gambar ini. Perhatikan gambar berikut:

image-3.png

Jika kita perhatikan garis jarak yang sama pada gambar kedua, maka akan terlihat seperti ini:

image-4.png

Perbedaan antara d1 dan d2 besar. Sekarang, mari mendekatkan pisang ke kamera:

image-5.png

Sekarang, mari gerakkan kamera dengan jumlah yang sama seperti yang kita lakukan sebelumnya, dan tangkap pemandangan yang sama dari sudut ini:

image-6.png

Seperti yang kita lihat, pergerakan antara posisi objek tidak banyak. Jika kita mempertimbangkan koordinat piksel, kita akan melihat bahwa nilainya dekat satu sama lain. Jarak pada gambar pertama adalah:

image-7.png

Jika kita perhatikan garis jarak yang sama pada gambar kedua, maka akan seperti yang ditunjukkan pada gambar berikut:

image-8.png

Perbedaan antara d3 dan d4 kecil. Kita dapat mengatakan bahwa perbedaan mutlak antara d1 dan d2 lebih besar daripada perbedaan mutlak antara d3 dan d4. Meskipun kamera digerakkan dengan jumlah yang sama, ada perbedaan besar antara yang terlihat jarak antara posisi awal dan akhir. Ini terjadi karena kita bisa mendekatkan objek ke kamera; gerakan yang tampak berkurang saat kita mengambil dua gambar dari sudut yang berbeda. Ini adalah konsep di balik korespondensi stereo: kita menangkap dua gambar dan menggunakan pengetahuan ini untuk mengekstrak informasi mendalam dari adegan tertentu.

Geometri epipolar

Sebelum membahas geometri epipolar, mari kita bahas apa yang terjadi ketika kita menangkap dua gambar pemandangan yang sama dari dua sudut pandang yang berbeda. Perhatikan gambar berikut:

image.png

Mari kita lihat bagaimana hal itu terjadi dalam kehidupan nyata. Perhatikan gambar berikut:

image-2.png

Sekarang, mari kita tangkap pemandangan yang sama dari sudut pandang yang berbeda:

image-3.png

Tujuan kita adalah mencocokkan titik kunci (keypoint) dalam dua gambar tersebut guna mengekstrak informasi dari gambar. Cara kita melakukan ini adalah dengan mengekstraksi matriks yang dapat mengaitkan titik-titik yang sesuai antara dua gambar stereo. Ini disebut matriks fundamental.

Seperti yang kita lihat pada gambar kamera sebelumnya, kita dapat menggambar garis untuk melihat di mana mereka bertemu. Garis-garis ini disebut garis epipolar. Titik di mana garis epipolar bertemu disebut epipol. Jika kita mencocokkan titik kunci menggunakan SIFT, dan menggambar garis menuju titik pertemuan di gambar kiri, akan terlihat seperti ini:

image-4.png

Berikut ini adalah poin fitur yang cocok pada gambar kanan:

image-5.png

Garis-garis tersebut merupakan garis epipolar. Jika kita mengambil gambar kedua sebagai referensi, maka akan muncul seperti yang ditunjukkan pada gambar berikutnya:

image-6.png

Berikut adalah poin fitur yang cocok pada gambar pertama:

image-7.png

Jika dua frame diposisikan dalam 3D, maka setiap garis epipolar antara dua frame harus memotong fitur yang sesuai di setiap frame dan masing-masing asal kamera. Ini dapat digunakan untuk memperkirakan pose kamera sehubungan dengan lingkungan 3D. Kita akan menggunakan informasi ini nanti, untuk mengekstrak informasi 3D dari tempat kejadian.

Berikut coding untuk mengekstrak geometri epipolar:

Membangun peta 3D

Sekarang kita sudah familiar dengan geometri epipolar, mari kita lihat bagaimana menggunakannya untuk membangun peta 3D berdasarkan gambar stereo. Mari kita perhatikan gambar berikut:

image.png

Langkah pertama adalah mengekstrak peta disparitas (disparity map) antara dua gambar. Jika kita melihat gambar, saat kita mendekati objek dari kamera di sepanjang garis penghubung, jarak antar titik berkurang. Dengan menggunakan informasi ini, kita dapat menyimpulkan jarak setiap titik dari kamera. Ini disebut peta kedalaman. Setelah kita menemukan titik yang cocok antara dua gambar, kita dapat menemukan perbedaan dengan menggunakan garis epipolar. Mari kita perhatikan gambar berikut:

image-2.png

Jika kita menangkap pemandangan yang sama dari posisi yang berbeda, kita mendapatkan gambar berikut:

image-3.png

Jika kita merekonstruksi peta 3D, akan terlihat seperti ini:

image-4.png

Ingatlah bahwa gambar ini tidak diambil menggunakan kamera stereo yang disejajarkan dengan sempurna. Itulah alasan peta 3D terlihat sangat noisy. Ini hanya untuk menunjukkan bagaimana kita dapat merekonstruksi dunia nyata menggunakan gambar stereo. Mari kita pertimbangkan pasangan gambar yang diambil menggunakan kamera stereo yang disejajarkan dengan benar. Berikut ini adalah gambar tampilan kiri:

image-5.png

Berikutnya adalah gambar tampilan kanan yang sesuai:

image-6.png

Jika Anda mengekstrak informasi kedalaman dan membuat peta 3D, itu akan terlihat seperti ini:

image-7.png

Mari kita putar untuk melihat apakah kedalamannya tepat untuk objek yang lain dalam gambar:

image-8.png

Seperti yang dapat kita lihat pada gambar sebelumnya, item disejajarkan dengan benar sesuai dengan jaraknya dari kamera. Kita dapat secara intuitif melihat bahwa mereka diatur dengan cara yang benar, termasuk posisi topeng yang miring. Kita bisa menggunakan teknik ini untuk membangun banyak hal menarik.

Kita memerlukan software MeshLab untuk memvisualisasikan adegan 3D. MeshLab dapat didownload dari http://meshlab.sourceforge.net.

Buka file output.ply menggunakan MeshLab dan kita akan melihat gambar 3D. Kita dapat memutarnya untuk mendapatkan tampilan 3D lengkap dari adegan yang direkonstruksi.

Berikut ini codingnya: